Priorbox
根据输入的特征图尺寸、步长和预设的候选框配置,逐元素计算先验框(Prior Boxes),通常用于目标检测模型。
该算子遍历特征图的每一个网格中心点,并围绕该中心点生成一系列具有不同尺寸和宽高比的候选框。生成的坐标 [xmin, ymin, xmax, ymax] 经过归一化处理。
- 输入:
fmap_h - 当前特征图的高度。
fmap_w - 当前特征图的宽度。
step_h - 计算先验框在原图上坐标时的垂直缩放比例。
step_w - 计算先验框在原图上坐标时的水平缩放比例。
offset - 中心点偏移量,通常为0.5,表示取网格的正中心。
min_sizes - 定义基础先验框尺寸的浮点数数组。
min_sizes_size -
min_sizes数组的长度。max_sizes - 可选的浮点数数组,用于生成额外的正方形先验框。
max_sizes_size -
max_sizes数组的长度。different_aspect_ratios - 定义不同宽高比的浮点数数组。
different_aspect_ratios_size -
different_aspect_ratios数组的长度。core_mask - 核掩码 (仅共享存储版本需要)。
- 输出:
output - 用于存储最终生成的先验框坐标的数组。
output_size - 指向一个整数的指针,函数执行后,该整数将记录写入
output数组的浮点数总数。
- 支持平台:
66787004
备注
6678支持fp32类型。
7004支持fp16和fp32类型。
共享存储版本:
-
int fp_priorbox_s(int fmap_h, int fmap_w, float step_h, float step_w, float offset, float *min_sizes, int min_sizes_size, float *max_sizes, int max_sizes_size, float *different_aspect_ratios, int different_aspect_ratios_size, float *output, int *output_size, int core_mask)
-
int hp_priorbox_s(int fmap_h, int fmap_w, half step_h, half step_w, half offset, half *min_sizes, int min_sizes_size, half *max_sizes, int max_sizes_size, half *different_aspect_ratios, int different_aspect_ratios_size, half *output, int *output_size, int core_mask)
C调用示例:
1#include "priorbox.h"
2
3int main() {
4 // DDR memory pointers
5 float *min_sizes = (float *)0xA0000000;
6 float *max_sizes = (float *)0xA0001000;
7 float *ratios = (float *)0xA0002000;
8 float *output = (float *)0xB0000000;
9 int output_size = 0;
10
11 // Parameters
12 int fmap_h = 19, fmap_w = 19;
13 float step_h = 16.0f, step_w = 16.0f;
14 float offset = 0.5f;
15 int min_sizes_size = 1;
16 int max_sizes_size = 1;
17 int ratios_size = 2;
18 int core_mask = 0xff;
19
20 // (假设 min_sizes, max_sizes, ratios 已在DDR中填充数据)
21
22 fp_priorbox_s(fmap_h, fmap_w, step_h, step_w, offset, min_sizes, min_sizes_size, max_sizes, max_sizes_size, ratios, ratios_size, output, &output_size, core_mask);
23
24 return 0;
25}
私有存储版本:
-
int fp_priorbox_p(int fmap_h, int fmap_w, float step_h, float step_w, float offset, float *min_sizes, int min_sizes_size, float *max_sizes, int max_sizes_size, float *different_aspect_ratios, int different_aspect_ratios_size, float *output, int *output_size)
-
int hp_priorbox_p(int fmap_h, int fmap_w, half step_h, half step_w, half offset, half *min_sizes, int min_sizes_size, half *max_sizes, int max_sizes_size, half *different_aspect_ratios, int different_aspect_ratios_size, half *output, int *output_size)
C调用示例:
1#include "priorbox.h"
2
3int main() {
4 // L2 memory arrays
5 float min_sizes_data[] = {30.0f};
6 float max_sizes_data[] = {60.0f};
7 float ratios_data[] = {2.0f, 0.5f};
8 float output_data[4 * 19 * 19 * (1 + 1 + 2)]; // 足够大的空间
9 int output_size = 0;
10
11 // Parameters
12 int fmap_h = 19, fmap_w = 19;
13 float step_h = 16.0f, step_w = 16.0f;
14 float offset = 0.5f;
15
16 fp_priorbox_p(fmap_h, fmap_w, step_h, step_w, offset, min_sizes_data, 1, max_sizes_data, 1, ratios_data, 2, output_data, &output_size);
17
18 return 0;
19}